实现CloudFlare后Websocket失败

您所在的位置:网站首页 socketio redis 实现CloudFlare后Websocket失败

实现CloudFlare后Websocket失败

#实现CloudFlare后Websocket失败| 来源: 网络整理| 查看: 265

我在一个实时网站上实现了cloudflare,该网站有一个套接字服务器,它使用socket.io和express安装,在实现cloudflare之前一切都很好

目前,我使用的是端口: 2053,我已经允许通过Laravel进入该端口。

socket.js

var app = require('express')(); const fs = require('fs'); var server = require('https').createServer({ key: fs.readFileSync('/etc/nginx/ssl/mywebsite.com/1234/server.key'), cert: fs.readFileSync('/etc/nginx/ssl/mywebsite.com/1234/server.crt'), }, app); var io = require('socket.io')(server, { cors: { origin: function(origin, fn) { if (origin === "http://mywebsite.test" || origin === "https://mywebsite.com") { return fn(null, origin); } return fn('Error Invalid domain'); }, methods: ['GET', 'POST'], 'reconnect': true }, }); var Redis = require('ioredis'); var redis = new Redis(); redis.subscribe('asset-channel', () => { console.log('asset-channel: started'); }); redis.on('message', function(channel, message) { var message = JSON.parse(message); io.to(message.data.id).emit(channel + ':' +message.event + ':'+ message.data.id, message.data); }); io.on("connection", (socket) => { socket.on("join:", (data) => { socket.join(data.id); }); socket.on("leave:", (data) => { socket.leave(data.id); }); }); server.listen(2053, () => { console.log('Server is running!'); });

app.js

if (! window.hasOwnProperty('io')) { // if ( // window.origin === "http://mywebsite.test" || // window.origin === "https://mywebsite.com" || // window.origin == "https://mywebsite.test" // ) { window.io = io.connect(`${window.origin}:2053`); window.io.on('connection'); // } }

如前所述,在实现cloudflare之前,一切都进行得很好,我和您已经尝试阅读了一些不同的文档,如:

https://developers.cloudflare.com/cloudflare-one/policies/zero-trust/corshttps://socket.io/docs/v4/handling-cors/

我在网上发现了许多类似的不同问题,并尝试了几种解决方案,但似乎没有什么能使套接字连接工作。

试着让所有这样的cors:

var io = require('socket.io')(server, { cors: { origin: "*", methods: ['GET', 'POST'], 'reconnect': true }, });

也没有工作,尝试在nginx中配置一些也不起作用的东西

Error从原点“https://mywebsite.com:2053/socket.io/?EIO=4&transport=polling&t=NurmHmi”到XMLHttpRequest的访问“https://mywebsite.com”已被CORS策略阻止:请求的资源上不存在“访问-控制-允许-原产地”标题。

我想我可能需要在cloudflare仪表板上配置一些东西,我只是不知道是什么,我的谷歌搜索技巧这次也不能把我带到终点线。

我对套接字不太有经验,所以如果有一些熟练的套接字专家曾经有过这个问题,谁能指导我走向正确的方向,那就太棒了?:)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3